/*
 * Copyright 2017 Baiyyy
 * @(#)PsZcdHzMapper.java
 */

package com.byyy.ccts.modules.cc.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.byyy.ccts.modules.cc.entity.ccts.PsZcdMx;
import com.byyy.ccts.modules.cc.entity.vo.LmisZcdMxUpdateVo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * Created by DELL on 2018-6-14.
 */
public interface PsZcdMxMapper extends BaseMapper<PsZcdMx> {

    /** 从Lmis获取装车单明细信息 */
    List<PsZcdMx> getZcdMxFromLmis();

    /** 从Lmis获取装车单明细信息（特定装车单） */
    List<PsZcdMx> getZcdMxFromLmisByZcdNo(String zcdNo);

    /** 没有商品存储温度的，根据商品ID更新装车单明细中的商品储存温度 */
    List<PsZcdMx> queryUpdShangpCondition();

    /** 从Lmis获取尚未同步的第三方装车单明细信息 */
    List<PsZcdMx> getDSFZcdMxFromLmis(@Param("zcdNos") List<String> zcdNos);

    /** 更新商品储存温度 */
    void updShangpCondition(PsZcdMx mx);

    /** 更新商品储存温度 */
    void updDSFTemp(PsZcdMx mx);

    /** 根据流水号获取明细信息 */
    List<PsZcdMx> selectByBarcodes(@Param("barcodes") List<String> barcodes);

    /** 根据装车单号查询装车单明细信息 */
    List<PsZcdMx> selectByZcdNos(@Param("zcdNos") List<String> zcdNos);

    /** 查询采集设备以及保温箱是否关联了其他的装车单 */
    List<PsZcdMx> isBindingOthZcdMx(@Param("zcdNo") String zcdNo, @Param("cjIds") List<String> cjIds, @Param("lcSns") List<String> lcSns);

    /** 查询采集设备以及保温箱是否关联了其他的装车单 */
    List<PsZcdMx> selectSimpleListByZcdNo(String zcdNo);

    /** 根据装车单号以及单据编号获取明细数据 */
    List<PsZcdMx> selectByDanjNos(@Param("zcdNo") String zcdNo, @Param("danjNos") List<String> danjNos);

    /** 查询是否还存在尚未结束的明细 */
    List<PsZcdMx> selectNotFinishedMx(String zcdNo);

    /** 根据单据编号查询装车单明细内关联设备当前温度以及明细内商品的温度限制 */
    List<PsZcdMx> selectZcdMxTempByDanjNo(@Param("danjNos") List<String> danjNos, @Param("handOverDate") Date handOverDate);

    /** 根据装车单号查询装车单明细内关联设备当前温度以及明细内商品的温度限制 */
    List<PsZcdMx> selectZcdMxTempByZcdNo(@Param("zcdNos") List<String> zcdNos);

    /** 装车确认时，查看是否存在冷藏车下的其他装车单，如果存在就一起进行装车确认操作 */
    List<PsZcdMx> selectZcdInCar(@Param("zcdNos") List<String> zcdNos);

    /** 冷藏车-查询是否还存在尚未结束的冷藏车单据 */
    List<PsZcdMx> selectNotFinishedCarMx(String zcdNo);

    /** 冷藏车-查询尚未上传的已经结束的单据中的冷藏车编号 */
    List<String> selectNotYetUploadedChillCar();

    List<PsZcdMx> zcdMxListPage(Page<PsZcdMx> page, @Param("ew") Wrapper<PsZcdMx> wrapper);

    /** 根据流水号获取装车单下所有的明细信息 */
    List<PsZcdMx> selectFullMxByBarcodes(@Param("barcodes") List<String> barcodes);

    /** 根据设备ID查询是否是在途运送的数据，查询单据信息 */
    PsZcdMx selectMxOnTheWayBySN(@Param("sn") String sn);

    /** 根据装车单明细ID进行Like检索，以求出拆分单中最大的INDEX */
    List<PsZcdMx> selectZcdMxLikeId(@Param("zcdId") String zcdId);

    /** 更新LMIS系统的保温箱号和启运温度 */
    int updateLmisZcdMxWithTemp(LmisZcdMxUpdateVo zcdMxUpdateVo);

    /** 根据冷藏车ID查询是否是在途运送的数据，查询单据信息 */
    PsZcdMx selectMxOnTheWayByCar(@Param("car") String car);

    /** 根据装车单号获取明细信息（冷藏车专用） */
    List<PsZcdMx> selectCarMxByZcdNos(@Param("zcdNos") List<String> zcdNos);
}
